const {
  WHITE_LIST,
  AUTH_ERR_CODE,
  UNAUTH_ERR_MSG,
  INVALID_AUTH_ERR_MSG,
} = require('../constant');

const { errHandler } = require('../tools');

module.exports = (options, app) => {
  return async function auth(ctx, next) {
    // 获取当前请求路径和方法
    const { path, method } = ctx;

    const { authorization } = ctx.headers;

    const token = authorization && authorization.split(' ')[1];

    console.log(token, 'token');

    // 检查当前请求是否在白名单中
    const isWhiteListed = WHITE_LIST.some(
      (item) => item.path === path && item.method === method
    );

    // 白名单路由直接放行
    if (isWhiteListed) {
      return await next();
    }

    // 非白名单路由执行认证逻辑
    if (!token) {
      return errHandler(ctx, {}, AUTH_ERR_CODE, UNAUTH_ERR_MSG);
    }

    // 验证 token（示例逻辑）
    try {
      const user = app.jwt.verify(token, app.config.jwt.secret);
      ctx.user = user; // 将用户信息挂载到 ctx
      await next();
    } catch (error) {
      errHandler(ctx, error, AUTH_ERR_CODE, INVALID_AUTH_ERR_MSG);
    }
  };
};
